package com.atguigu.gulimall.gateway;


import java.util.Scanner;
/**
 *
 * @Description 实现汉罗塔步骤解析
 * @author wjj Email:594193977@qq.com
 * @version
 * @date 2022年2月18日下午3:06:05
 *
 */
public class hanluota {
    static int m=0;//标记移动次数
    //实现移动的函数
    public static void move(int hao,char n,char l){
        System.out.println("第" + (++m) +" 次移动 : " +" 把 "+ hao+" 号圆盘从 " + n +" ->移到->  " + l);
    }
    //递归实现汉诺塔的函数
    public static void yidong(int i,char A,char B,char C){
        if(i==1){
            hanluota.move(1,A,C);
        }else{
            yidong(i-1,A,C,B);//递归，把A塔上编号1~n-1的圆盘移到B上，以C为辅助塔
            hanluota.move(i, A, C);//把A塔上编号为n的圆盘移到C上
            yidong(i-1,B,A,C);//递归，把B塔上编号1~n-1的圆盘移到C上，以A为辅助塔
        }
    }
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        char A='A';
        char B='B';
        char C='C';
        System.out.println("******************************************************************************************");
        System.out.println("这是汉诺塔问题（把A塔上编号从小号到大号的圆盘从A塔通过B辅助塔移动到C塔上去");
        System.out.println("******************************************************************************************");
        System.out.print("请输入圆盘的个数：");
        int hao=in.nextInt();
        hanluota.yidong(hao, A, B, C);
        System.out.println(">>移动了"+m+ "次，把A上的圆盘都移动到了C上");
        in.close();
    }

}
